package racpdm;

import java.util.Set;

import espest.EstadoAbstracto;
import espest.OperadorAbstracto;
import espest.Transicao;

public interface ModeloPDM<E extends EstadoAbstracto, Op extends OperadorAbstracto<E>> {
	

	
	/*
	 * Funcao T(s,a,s')
	 * @param trans Transicao de estado (s, a, s')
	 * @return Probabilidade da transicao de estado ocorrer
	 */
	double t(Transicao<E> trans);

	/*
	 * Funcao R(s,a,s')
	 * @param trans Transicao de estado (s, a, s')
	 * @return Recompensa associada a transicao de estado
	 */
	double r(Transicao<E> trans);
	
	/*
	 * Funcao S()
	 * @return Conjunto de estados
	 */
	public Set<E> s();
	
	/*
	 * Funcao O(s)
	 * @return Conjunto de operadores aplicaveis num estado
	 */
	public Set<Op> o(E estado);
}
